home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / DJEMU106.ARJ / EMU.H < prev    next >
C/C++ Source or Header  |  1991-04-25  |  4KB  |  178 lines

  1. #ifndef _NPX_H_
  2. #define _NPX_H_
  3.  
  4. void emu_install();
  5.  
  6. extern int modrm;
  7.  
  8. extern unsigned eax;
  9. extern unsigned ebx;
  10. extern unsigned ecx;
  11. extern unsigned edx;
  12. extern unsigned esi;
  13. extern unsigned edi;
  14. extern unsigned ebp;
  15. extern unsigned esp;
  16. extern unsigned char *eip;
  17.  
  18. struct reg {
  19.   char sign;
  20.   char tag;
  21.   short exp;
  22.   unsigned sigl;
  23.   unsigned sigh;
  24. };
  25.  
  26. #define EXP_BIAS 16383
  27. #define EXP_MAX 32767
  28.  
  29. #define SIGN_POS    0
  30. #define SIGN_NEG    1
  31.  
  32. #define TW_V    0    // valid
  33. #define TW_Z    1    // zero
  34. #define TW_S    2    // special
  35. #define TW_E    3    // empty
  36.  
  37. #define EX_SO    0x02C1    // stack overflow
  38. #define EX_SU    0x00C1    // stack underflow
  39. #define EX_P    0x00A0    // loss of precision
  40. #define EX_U    0x0090    // underflow
  41. #define EX_O    0x0088    // overflow
  42. #define EX_Z    0x0084    // divide by zero
  43. #define EX_D    0x0082    // denormalized operand
  44. #define EX_I    0x0081    // invalid operation
  45.  
  46. #define SW_B    0x8000    // backward compatibility (=ES)
  47. #define SW_C3    0x4000    // condition bit 3
  48. #define SW_TOP    0x3800    // top of stack
  49. #define SW_TOPS 0x0800    // scale for TOS
  50. #define SW_C2    0x0400    // condition bit 2
  51. #define SW_C1    0x0200    // condition bit 1
  52. #define SW_C0    0x0100    // condition bit 0
  53. #define SW_ES    0x0080    // exception summary
  54. #define SW_SF    0x0040    // stack fault
  55. #define SW_PE    0x0020    // loss of precision
  56. #define SW_UE    0x0010    // underflow
  57. #define SW_OE    0x0008    // overflow
  58. #define SW_ZE    0x0004    // divide by zero
  59. #define SW_DE    0x0002    // denormalized operand
  60. #define SW_IE    0x0001    // invalid operation
  61.  
  62. #define CW_RC    0x0C00    // rounding control
  63. #define CW_PC    0x0300    // precision control
  64. #define CW_PM    0x0020    // precision mask
  65. #define CW_UM    0x0010    // underflow mask
  66. #define CW_OM    0x0008    // overflow mask
  67. #define CW_ZM    0x0004    // divide by zero mask
  68. #define CW_DM    0x0002    // denormalized operand mask
  69. #define CW_IM    0x0001    // invalid operation mask
  70. #define CW_EXM    0x007f    // all masks
  71.  
  72. #define RC_RND    0x0000
  73. #define RC_DOWN    0x0400
  74. #define RC_UP    0x0800
  75. #define RC_CHOP    0x0C00
  76.  
  77. /*
  78. ** THE NPX ENVIRONMENT
  79. */
  80.  
  81. extern int status_word;
  82. extern int control_word;
  83. extern reg regs[8];
  84. extern int top;
  85.  
  86. /*
  87. ** UTILITY FUNCTIONS
  88. */
  89.  
  90. extern void *get_modrm();
  91. inline reg& st(int which=0) { return regs[(top+which)&7]; }
  92. extern void emu_printall();
  93. extern void exception(int which); // returns 1 if unmasked
  94. extern void setcc(int cc);
  95. extern int full(); // returns 1 if exception, handles exception
  96. extern int empty(int i=0); // returns 1 if exception, handles exception
  97.  
  98. typedef void (*FUNC)();
  99.  
  100. void emu_bad();
  101.  
  102. void r_add(reg& a, reg& b, reg& s); // a + b -> s
  103. void r_sub(reg& a, reg& b, reg& d); // a - b -> d
  104. void r_mul(reg& a, reg& b, reg& p); // a * b -> p
  105. void r_div(reg& a, reg& b, reg& q); // a / b -> q
  106.  
  107. void r_mov(reg& s, reg& d);
  108.  
  109. int val_same(reg& a, reg& b);
  110. int mag_same(reg& a, reg& b);
  111.  
  112. void emu_00();
  113. void emu_01();
  114. void emu_02();
  115. void emu_03();
  116. void emu_04();
  117. void emu_05();
  118. void emu_06();
  119. void emu_07();
  120. void emu_10();
  121. void emu_11();
  122. void emu_12();
  123. void emu_13();
  124. void emu_14();
  125. void emu_15();
  126. void emu_16();
  127. void emu_17();
  128. void emu_20();
  129. void emu_21();
  130. void emu_22();
  131. void emu_23();
  132. void emu_24();
  133. void emu_25();
  134. void emu_26();
  135. void emu_27();
  136. void emu_30();
  137. void emu_31();
  138. void emu_32();
  139. void emu_33();
  140. void emu_34();
  141. void emu_35();
  142. void emu_36();
  143. void emu_37();
  144. void emu_40();
  145. void emu_41();
  146. void emu_42();
  147. void emu_43();
  148. void emu_44();
  149. void emu_45();
  150. void emu_46();
  151. void emu_47();
  152. void emu_50();
  153. void emu_51();
  154. void emu_52();
  155. void emu_53();
  156. void emu_54();
  157. void emu_55();
  158. void emu_56();
  159. void emu_57();
  160. void emu_60();
  161. void emu_61();
  162. void emu_62();
  163. void emu_63();
  164. void emu_64();
  165. void emu_65();
  166. void emu_66();
  167. void emu_67();
  168. void emu_70();
  169. void emu_71();
  170. void emu_72();
  171. void emu_73();
  172. void emu_74();
  173. void emu_75();
  174. void emu_76();
  175. void emu_77();
  176.  
  177. #endif
  178.